package pluginFactory;

import java.io.File;
import java.io.FilenameFilter;
import java.net.MalformedURLException;
import java.util.Vector;

/**
 * Class to load the plugins.
 * 
 * @author Andy Cullache
 */
public class PluginsCharger {
	
    private static final String EXTENSION_JAR = ".jar";

    /**
     * Loads the plugins found in the directory given as parameter to CLASSPATH.
     * @return true if plugins were loaded,
     *         false otherwise.
     * @throws NoSuchMethodException 
     */
    public static boolean Charger(String directory) throws PluginFactoryException {
        boolean isCharged = false;
        //obtiene el listado de archivos .jar dentro del directorio
        File[] jars = Finder(directory);

        if (jars.length > 0)
        {
            ClassPathModifier cp;
			try
			{
				cp = new ClassPathModifier();
	            //a cada jar lo incluye al classpath
	            for (File jar : jars) {
	                    cp.addArchivo(jar);
	            }
	            isCharged = true;
			}
			catch (NoSuchMethodException e)
			{
				e.printStackTrace();
			}
			catch (MalformedURLException e)
			{
				e.printStackTrace();
			}
        }
        return isCharged;
    }

    /**
     * Searches for all Jar files found in the directory given as parameter and returns in array.
     * @return jar files from directory.
     */
    public static File[] Finder(String directory) {
        //crea lista vacia de archivos
        Vector< File > vUrls = new Vector< File >();

        //si existe el directorio "plugins" continua
        File directorioPlugins = new File(directory);
        if (directorioPlugins.exists() && directorioPlugins.isDirectory()) {

            //obtiene todos los archivos con la extension .jar
            File[] jars = directorioPlugins.listFiles(new FilenameFilter() {

                @Override
                public boolean accept(File dir, String name) {
                    return name.endsWith(EXTENSION_JAR);
                }
            });

            //los agrega a la lista de archivos
            for (File jar : jars) {
                vUrls.add(jar);
            }
        }

        //retorna todos los archivos encontrados
        return vUrls.toArray(new File[0]);
    }
}



